# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Content.V21.Model.LoyaltyProgram do
  @moduledoc """
  Allows the setting up of loyalty program benefits (for example price or points). https://support.google.com/merchants/answer/12922446

  ## Attributes

  *   `cashbackForFutureUse` (*type:* `GoogleApi.Content.V21.Model.Price.t`, *default:* `nil`) - Optional. The cashback that can be used for future purchases.
  *   `loyaltyPoints` (*type:* `String.t`, *default:* `nil`) - Optional. The amount of loyalty points earned on a purchase.
  *   `memberPriceEffectiveDate` (*type:* `String.t`, *default:* `nil`) - Optional. A date range during which the item is eligible for member price. If not specified, the member price is always applicable. The date range is represented by a pair of ISO 8601 dates separated by a space, comma, or slash.
  *   `price` (*type:* `GoogleApi.Content.V21.Model.Price.t`, *default:* `nil`) - Optional. The price for members of the given tier (instant discount price). Must be smaller or equal to the regular price.
  *   `programLabel` (*type:* `String.t`, *default:* `nil`) - Required. The label of the loyalty program. This is an internal label that uniquely identifies the relationship between a merchant entity and a loyalty program entity. It must be provided so that system can associate the assets below (for example, price and points) with a merchant. The corresponding program must be linked to the merchant account.
  *   `shippingLabel` (*type:* `String.t`, *default:* `nil`) - Optional. The shipping label for the loyalty program. You can use this label to indicate whether this offer has the loyalty shipping benefit. If not specified, the item is not eligible for loyalty shipping for the given loyalty tier.
  *   `tierLabel` (*type:* `String.t`, *default:* `nil`) - Required. The label of the tier within the loyalty program. Must match one of the labels within the program.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :cashbackForFutureUse => GoogleApi.Content.V21.Model.Price.t() | nil,
          :loyaltyPoints => String.t() | nil,
          :memberPriceEffectiveDate => String.t() | nil,
          :price => GoogleApi.Content.V21.Model.Price.t() | nil,
          :programLabel => String.t() | nil,
          :shippingLabel => String.t() | nil,
          :tierLabel => String.t() | nil
        }

  field(:cashbackForFutureUse, as: GoogleApi.Content.V21.Model.Price)
  field(:loyaltyPoints)
  field(:memberPriceEffectiveDate)
  field(:price, as: GoogleApi.Content.V21.Model.Price)
  field(:programLabel)
  field(:shippingLabel)
  field(:tierLabel)
end

defimpl Poison.Decoder, for: GoogleApi.Content.V21.Model.LoyaltyProgram do
  def decode(value, options) do
    GoogleApi.Content.V21.Model.LoyaltyProgram.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Content.V21.Model.LoyaltyProgram do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
